package com.mall.mapper;

import com.mall.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户数据访问层
 * 
 * @author Mall Team
 */
@Mapper
public interface UserMapper {
    
    /**
     * 插入用户
     */
    int insert(User user);
    
    /**
     * 根据ID删除用户
     */
    int deleteById(Long id);
    
    /**
     * 更新用户
     */
    int updateById(User user);
    
    /**
     * 根据ID查询用户
     */
    User selectById(Long id);
    
    /**
     * 根据用户名查询用户
     */
    User selectByUsername(String username);
    
    /**
     * 根据手机号查询用户
     */
    User selectByPhone(String phone);
    
    /**
     * 根据邮箱查询用户
     */
    User selectByEmail(String email);
    
    /**
     * 分页查询用户列表
     */
    List<User> selectPage(@Param("offset") Integer offset, 
                         @Param("limit") Integer limit,
                         @Param("keyword") String keyword,
                         @Param("userType") Integer userType,
                         @Param("status") Integer status);
    
    /**
     * 查询用户总数
     */
    Long selectCount(@Param("keyword") String keyword,
                    @Param("userType") Integer userType,
                    @Param("status") Integer status);
    
    /**
     * 检查用户名是否存在
     */
    boolean existsByUsername(String username);
    
    /**
     * 检查手机号是否存在
     */
    boolean existsByPhone(String phone);
    
    /**
     * 检查邮箱是否存在
     */
    boolean existsByEmail(String email);
    
    /**
     * 更新用户状态
     */
    int updateStatus(@Param("id") Long id, @Param("status") Integer status);
    
    /**
     * 批量删除用户
     */
    int deleteBatchByIds(@Param("ids") List<Long> ids);
    /**
     * 管理端获取所有用户（可带关键字模糊查询）
     */
    List<User> selectAll(@Param("keyword") String keyword);
}